package networking;

import java.io.*;
import java.net.*;


/**
 * Der Thread macht praktisch nichts weiter als die Werte, die der Server ihm 
 * sendet, aus dem String in ein Array aus Positionen zu wandeln. Dieses Array
 * lässt sich durch die Funktion getPos abrufen.
 * 
 * @author Michael
 */
class LeseThreadClient implements Runnable {
    
    
static int length = 256;
DatagramSocket socket;
int[] positions;


/**
 * Das Array kann maximal die Positionen von 3 Balken und dem Ball enthalten, deshalb wird es hier mit einer Größe von 8 angelegt. Der socket wird zur Vereinfachung direkt übergeben, statt ihn neu zu definieren.
 * @param socket 
 */
LeseThreadClient(DatagramSocket socket ) {
    this.socket = socket;
    this.positions = new int[8];
    Thread t = new Thread(this,"Lesen");
    t.start();
}


public void run() {
    //Ein neues Paket wird erstellt
    DatagramPacket paket = new DatagramPacket( new byte[length], length);
    while( true ) {
        try {     
            //Ein Paket kann empfangen werden, der Inhalt wird als Text extrahiert
            socket.receive( paket );
            String text = new String(paket.getData(), 0, paket.getLength());            
            System.out.println("Paket empfangen: "+text);
            int beginn=0;
            int ende;
            int anz=0;
            //Die Daten liegen in folgendem Format vor: xPos1;yPos1;xPos2;yPos2;... Und werden nun ein Array übernommen
            for(int l=0;l<text.length();l++){
                if(text.charAt(l)==';'){
                    ende=l;
                    positions[anz]=new Integer(text.substring(beginn,ende));                   
                    beginn=l+1;
                    anz++;
                }                
            }
            positions[anz]=new Integer(text.substring(beginn,text.length()));
        }
        catch( IOException e ) {
            System.err.println("Ausnahmefehler: " + e );
        }
    }
}

/**
 * Diese Methode gibt das Array zurück
 * @return 
 */
public int[] getPos(){
    return positions;
}
}

